#include "volumetool.h"
#include "ui_volumetool.h"

VolumeTool::VolumeTool(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::VolumeTool),
    isMuted(false),
    volumeRatio(20)
{
    ui->setupUi(this);

     // Qt::Popup -- 主要作用是将窗口设置为一种弹出窗口样式，使得窗口无边框并能够表现出类似弹出菜单或对话框的行为
     // Qt::FramelessWindowHint 这个标志使得窗口没有边框（即无窗口框架）
    // NoDropShadowWindowHint 这个标志表示窗口不会有阴影
    setWindowFlags(Qt::Popup | Qt::FramelessWindowHint |Qt::NoDropShadowWindowHint);

    setAttribute(Qt::WA_TranslucentBackground); // 设置窗口背景为透明，可以用于实现透明效果或自定义窗口背景

    //给空间添加自定义的阴影效果
    QGraphicsDropShadowEffect* shadowEffect = new QGraphicsDropShadowEffect(this);
    shadowEffect->setColor("#646464"); //
    shadowEffect->setBlurRadius(10);  //设置圆角效果
    shadowEffect->setOffset(0, 0);
    setGraphicsEffect(shadowEffect); //谁调用这个方法谁就设置这个效果

    //设置按钮图标
    ui->silenceBtn->setIcon(QIcon(":/image/volumn.png"));

    //将默认的音量设置为 20%
    ui->volumeRadio->setText("20%");

    //窗体原本的高度180 * 20% = 36,25rect距离父元素上方的距离 将outLine的高度设置为16，宽度保持不变，outline的left-top的坐标就要重新计算
    // x坐标不变， y坐标如何计算？ 原来的height - 36
    // 设置outLine尺寸
    QRect rect = ui->outLine->geometry();
    ui->outLine->setGeometry(rect.x(), 180 + 25 - 36, rect.width(), 36);

    //移动按钮的位置
    ui->sliderBtn->move(ui->sliderBtn->x(), ui->outLine->y() - ui->sliderBtn->height() / 2);

    connect(ui->silenceBtn, &QPushButton::clicked, this, &VolumeTool::onSilenceBtnClicked);

    //安装事件过滤器，否则事件机制不生效
    ui->volumeBox->installEventFilter(this);
}



VolumeTool::~VolumeTool()
{
    delete ui;
}


void VolumeTool::paintEvent(QPaintEvent *event)
{
    QPainter painter(this); //画家 --传递this，将来在哪个控件上去绘制图形
    painter.setPen(Qt::NoPen); //画笔
    painter.setBrush(QBrush(Qt::white)); //设置画刷

    //绘制三角形 drawPolygon
    QPolygon polygon;
    QPoint a(10 + 10, 300);
    QPoint b(10 + 10 + 60, 300 );
    QPoint c(10 + 10 +  30, 300 + 20);
    polygon.append(a);
    polygon.append(b);
    polygon.append(c);

    painter.drawPolygon(polygon);
}


void VolumeTool::onSilenceBtnClicked()
{
    isMuted = !isMuted;
    //静音图标的切换
    if(isMuted)
    {
        //true 表示静音
        ui->silenceBtn->setIcon(QIcon(":/image/silent.png"));
    }
    else
    {
        //非静音
        ui->silenceBtn->setIcon(QIcon(":/image/volumn.png"));
    }

    //媒体静音设置，发射信号让QQMusic去处理
    emit setMusicMuted(isMuted);
}

bool VolumeTool::eventFilter(QObject *watched, QEvent *event)
{
    if(ui->volumeBox == watched)
    {
        //事件发生在volumeBox控件上
        if(event->type() == QEvent::MouseButtonPress)
        {
              //鼠标按下事件
              calcVolume();
        }
        else if(event->type() == QEvent::MouseButtonRelease)
        {
            //鼠标释放事件
            calcVolume();
            emit setMusicVolume(volumeRatio);
        }
        else if(event->type() == QEvent::MouseMove)
        {
            calcVolume();
            emit setMusicVolume(volumeRatio);
            //鼠标移动事件
        }
    }

    return QObject::eventFilter(watched, event); //否则交给QObject来处理
}

void VolumeTool::calcVolume()
{
    //获取鼠标点击时的y坐标 //QCursor()获取当前鼠标点击相当于屏幕的坐标  mapToGlobal获取相当于控件的坐标
    //y坐标，也是outline的一个高度
    int height = ui->volumeBox->mapFromGlobal(QCursor().pos()).y();

    //验证height的一个合法性
    height = height < 25 ? 25 : height;
    height = height > 205 ? 205 :height;

    //更新outLine高低
    ui->outLine->setGeometry(ui->outLine->x(), height, ui->outLine->width(), 205 - height);

    //更新sliderBtn的位置, sliderBtn本质是矩形，然后设置了圆角效果 让sliderBtn的圆心和ui->outline的上边界平齐
    ui->sliderBtn->move(ui->sliderBtn->x(), ui->outLine->y() - ui->sliderBtn->height()/2);

    //计算音量大小
    volumeRatio = (int)ui->outLine->height() / (float)180 * 100;

    //计算音量的百分比, 默认转换为10进制
    ui->volumeRadio->setText(QString::number(volumeRatio, 10) +"%");
}











